package com.demo.java.OD51_100.OD99;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【一种字符串压缩表示的解压】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145662699
 */
public class OdMain {
    public static void solve(String value) {
        StringBuilder result = new StringBuilder();
        int i = 0;

        // 只允许 [a-z0-9]
        for (int k = 0; k < value.length(); k++) {
            char ch = value.charAt(k);
            if (!(ch >= 'a' && ch <= 'z') && !(ch >= '0' && ch <= '9')) {
                System.out.println("!error");
                return;
            }
        }

        while (i < value.length()) {
            char c = value.charAt(i);

            if (Character.isDigit(c)) {
                // 数字不能以 0 开头
                if (c == '0') {
                    System.out.println("!error");
                    return;
                }

                int repeatCount = 0;
                // 解析多位数字
                while (i < value.length() && Character.isDigit(value.charAt(i))) {
                    int digit = value.charAt(i) - '0';
                    repeatCount = repeatCount * 10 + digit;
                    i++;
                }

                // 至少为 3
                if (repeatCount < 3) {
                    System.out.println("!error");
                    return;
                }

                // 数字后必须有一个小写字母
                if (i >= value.length()) {
                    System.out.println("!error");
                    return;
                }
                char repeatChar = value.charAt(i);
                if (repeatChar < 'a' || repeatChar > 'z') {
                    System.out.println("!error");
                    return;
                }

                // 边界合并检查：上一个已输出字符若与 repeatChar 相同则非法
                if (result.length() > 0 && result.charAt(result.length() - 1) == repeatChar) {
                    System.out.println("!error");
                    return;
                }

                // 长度限制检查
                if ((long) result.length() + repeatCount > 100) {
                    System.out.println("!error");
                    return;
                }

                // 追加展开
                for (int j = 0; j < repeatCount; j++) result.append(repeatChar);
                i++; // 跳过该字母
            } else {
                // 处理连续的小写字母段
                if (c < 'a' || c > 'z') {
                    System.out.println("!error");
                    return;
                }
                int start = i;
                char ch = value.charAt(i);
                while (i < value.length() && value.charAt(i) == ch) i++;
                int runLen = i - start;

                // 未压缩字母段若 >=3，则非法（本应写成 数字+字母）
                if (runLen >= 3) {
                    System.out.println("!error");
                    return;
                }

                // 长度限制
                if ((long) result.length() + runLen > 100) {
                    System.out.println("!error");
                    return;
                }

                // 追加该段
                for (int j = 0; j < runLen; j++) result.append(ch);
            }
        }

        System.out.println(result);
    }

    public static void main(String[] args) {
        try (Scanner s = new Scanner(System.in)) {
            String value = s.nextLine();
            solve(value);
        } catch (Exception e) {
            System.out.println("!error");
        }
    }
}